#ifndef Property_h
#define Property_h

#include <string>
#include "HMath.h"
#include "ReferenceCounted.h"

namespace hxe
{
    enum PropertyType
    {
        PROPERTY_BOOL,
        PROPERTY_INT,
        PROPERTY_FLOAT,
        PROPERTY_VECTOR_3,
        PROPERTY_VECTOR_4,
        PROPERTY_MATRIX_4X4,
        PROPERTY_TEXTURE,
    };

    class Property : public virtual ReferenceCounted
    {
    public:
        virtual bool getBool() { return false; }

        virtual int getInt() { return 0; }

        virtual float getFloat() { return 0.0f; }

        virtual Vector3 getVector3() { return Vector3(0.0f, 0.0f, 0.0f); }

        virtual Vector4 getVector4() { return Vector4(0.0f, 0.0f, 0.0f, 0.0f); }

        virtual Matrix4x4 getMatrix() { return Matrix4x4(1.0f); } 

    public:
        virtual void setBool(bool value) { }

        virtual void setInt(int value) { }

        virtual void setFloat(float value) { }

        virtual void setVector3(Vector3 value) { }

        virtual void setVector4(Vector4 value) { }

        virtual void setMatrix(Matrix4x4 value) { }

    public:
        Property(std::string name) { this->name = name; }

        std::string getName() const { return name; }

        virtual PropertyType getPropertyType() const = 0;

        virtual Property* copy() = 0;

    private:
        std::string name;
    };
}

#endif // Property_h
